/**
 **********************************************************************************************************************
 * @file    cot_param_cfg.h
 * @brief   该文件提供参数管理框架相关配置选项
 **********************************************************************************************************************
 */

/* Define to prevent recursive inclusion -----------------------------------------------------------------------------*/

#ifndef _COT_PARAM_CFG_H_
#define _COT_PARAM_CFG_H_

/* Includes ----------------------------------------------------------------------------------------------------------*/

/* 参数保存时是否采用键值对方式保存
 * 该配置项决定了参数在存储时的格式:
 * 1 - 采用键值对方式存储:
 *     - 优点:参数表修改时可以向下兼容
 *     - 每个参数都有唯一的键(ID)标识
 *     - 可以灵活地添加、删除、修改参数
 * 0 - 采用固定顺序存储:
 *     - 参数表修改时可能不兼容
 *     - 删除或添加参数会破坏兼容性
 *     - 只能在参数表末尾添加新参数
 */
#define COT_PARAM_USE_KEY_VALUE 1

/* 使用参数自定义校验功能
 * 该配置项控制是否启用参数的自定义校验:
 * 1 - 启用自定义校验:
 *     - 可以为参数定义特殊的校验规则
 *     - 在范围校验通过后执行
 *     - 通过回调函数实现自定义逻辑
 * 0 - 禁用自定义校验:
 *     - 仅执行基本的范围校验
 */
#define COT_PARAM_USE_CUSTOM_CHECK 1

/* 使用字符串参数类型
 * 该配置项决定是否支持字符串类型参数:
 * 1 - 启用字符串支持:
 *     - 可以存储和管理字符串类型的参数
 *     - 需要额外的内存开销
 * 0 - 禁用字符串支持:
 *     - 仅支持数值类型参数
 *     - 减少内存占用
 */
#define COT_PARAM_USE_STRING_TYPE 1

/* 使用64位的参数类型
 * 该配置项控制是否支持64位数据类型:
 * 1 - 启用64位支持:
 *     - 支持int64_t、uint64_t和double类型
 *     - 适用于需要高精度或大范围数值的场景
 * 0 - 禁用64位支持:
 *     - 仅支持32位及更小的数据类型
 *     - 减少内存占用
 */
#define COT_PARAM_USE_64_BIT_LENGTH 1

/* 参数名字最大定义长度
 * 定义参数名称的最大字符数(包含结束符'\0'):
 * - 值大于1: 启用参数名称功能,最大长度为设定值
 * - 值小于等于1: 禁用参数名称功能
 * - 参数名称用于调试和显示,不影响参数存储
 */
#define COT_PARAM_NAME_MAX_LENGTH 15

#if COT_PARAM_USE_STRING_TYPE
/* 字符串类型参数的最大长度
 * 定义字符串类型参数的最大字符数(包含结束符):
 * - 限制字符串参数的存储空间
 * - 需要根据实际应用场景和内存限制设置
 * - 仅在启用COT_PARAM_USE_STRING_TYPE时有效
 */
#define COT_PARAM_STRING_MAX_LENGTH 15
#endif

#if COT_PARAM_USE_KEY_VALUE

/* 参数表最大支持的参数数量
 * 定义单个参数表可以包含的最大参数数量:
 * COT_PARAM_SUPPORT_16  = 1: ID范围 0-15,最多支持16个参数
 * COT_PARAM_SUPPORT_256 = 2: ID范围 0-255,最多支持256个参数
 * COT_PARAM_SUPPORT_4096 = 3: ID范围 0-4095,最多支持4096个参数
 * 仅在启用COT_PARAM_USE_KEY_VALUE时需要配置
 */
#define COT_PARAM_SUPPORT_NUM COT_PARAM_SUPPORT_256
#define COT_PARAM_SUPPORT_16 1   /* ID取值范围0-15 */
#define COT_PARAM_SUPPORT_256 2  /* ID取值范围0-255 */
#define COT_PARAM_SUPPORT_4096 3 /* ID取值范围0-4095 */

#endif

#if COT_PARAM_USE_KEY_VALUE
#if (PARAM_SUPPORT_NUM == COT_PARAM_SUPPORT_16)
#if COT_PARAM_STRING_MAX_LENGTH >= 16
#error "Param: The maximum length of a string can not over 15"
#endif
#elif (PARAM_SUPPORT_NUM == COT_PARAM_SUPPORT_256)
#if COT_PARAM_STRING_MAX_LENGTH >= 256
#error "Param: The maximum length of a string can not over 256"
#endif
#elif (PARAM_SUPPORT_NUM == COT_PARAM_SUPPORT_4096)
#if COT_PARAM_STRING_MAX_LENGTH >= 4096
#error "Param: The maximum length of a string can not over 4096"
#endif
#endif
#endif

#endif
